前一天我已經完成森林場景的原型規劃,讓森林成為後續主線探索區域。不過在真正讓玩家前往森林之前,劇情流程還需要更清楚的引導。
依照目前劇本,玩家在教學遺跡遇到小怪後,會回到村莊向村長報告。村長得知遺跡出現異常後,並不會立刻要求玩家深入森林,而是先提到村裡幾個年輕人早上在森林遇到大量小怪並受傷,接著要求玩家去酒館詢問他們更詳細的情況。
所以 Day 21 的目標不是做完整任務系統,而是先做一個最小可用的「目前目標」提示。
當玩家完成村長第一次對話後,畫面左上角會顯示:
目前目標:前往酒館,詢問受傷的年輕人
首先,我建立了一個新的腳本 CurrentObjectiveDisplay.cs,用來管理目前目標文字,並將它顯示在畫面左上角。


這個腳本的功能很簡單,主要包含兩個部分:
第一個是 SetObjective(...),用來更新目前目標文字。當其他腳本呼叫這個方法時,畫面上顯示的目標就會改變;第二個是 OnGUI,負責把目前目標畫在遊戲畫面上。這裡先使用 OnGUI,是因為 Day 21 只需要快速驗證功能,不需要馬上建立完整任務 UI 或 Canvas 系統。等後面任務系統更完整時,再把它改成正式 UI 也不遲。
另外,CurrentObjectiveDisplay 會使用 DontDestroyOnLoad,讓這個物件在場景切換後仍然保留。這很重要,因為目前目標不應該因為玩家從村長家走到村莊,或之後前往酒館,就直接消失。接著,我回到 Unity,在場景中建立 CurrentObjectiveDisplay 物件,並將剛剛寫好的腳本掛上去。

這個物件本身不需要 Sprite,也不需要碰撞。它的作用比較像一個遊戲管理器,負責記錄和顯示目前目標。
之後其他系統只要呼叫 CurrentObjectiveDisplay.SetObjective(...),就能更新畫面上的目標文字。
完成目標顯示腳本後,下一步是把它和村長對話接起來。
目前村長對話使用的是前面 Day 19 建立的 NpcDialogueInteraction.cs,所以這次我在這個對話腳本中加入「對話完成後設定目標」的功能。

這裡的重點是:只有玩家把對話正常推進到最後一句,才會設定目前目標,如果玩家只是靠近村長後按 Esc 關閉對話,或是還沒看完就離開互動範圍,就不應該直接更新任務目標。
因此 NpcDialogueInteraction.cs 新增了幾個欄位與流程:
setObjectiveOnComplete:是否在對話完成後設定目標。
objectiveTextOnComplete:對話完成後要顯示的目標文字。
CompleteDialogue():在對話正常結束時執行,並呼叫 CurrentObjectiveDisplay.SetObjective(...)。
這樣做的好處是,目標更新和劇情對話綁在一起。玩家必須真的完成村長對話,才會得到下一步提示。接著,我在 ChiefInteractionArea 上設定村長對話完成後要顯示的目標。

在 Inspector 中,我確認 ChiefInteractionArea 的 NpcDialogueInteraction 已經勾選 Set Objective On Complete,並在 Objective Text On Complete 中填入:
前往酒館,詢問受傷的年輕人
這裡原本曾經想把目標指向森林,但重新對照劇本後,發現這樣會跳太快。
目前劇情應該是:玩家先向村長回報遺跡小怪,村長再提到森林受傷的年輕人,接著要求玩家去酒館詢問他們,而不是馬上叫玩家進入森林。
因此 Day 21 也同步修正了村長第一次對話的內容,讓它更符合劇本流程。村長會提到主角不是今天第一個帶來壞消息的人,森林外圍也出現大量小怪,有年輕人受傷,現在正在酒館養傷與壓驚。最後村長要求主角先去酒館問清楚,不要直接深入森林。
最後,我進入 Play Mode 測試整個流程。

測試時,玩家靠近村長並推進完整段對話。當村長對話結束後,畫面左上角成功顯示:
目前目標:前往酒館,詢問受傷的年輕人
這代表 Day 21 的流程已經成功串起來:
玩家與村長互動。
玩家完整看完村長第一次對話。
對話腳本判定對話正常完成。
NpcDialogueInteraction 呼叫 CurrentObjectiveDisplay.SetObjective(...)。
畫面左上角顯示目前目標。
目標內容依照劇本指向酒館。
Day 21 到這裡就完成了。
這一天沒有做任務列表、任務獎勵、任務資料庫,也沒有做完整分支系統,只先建立最小可用的目前目標提示。這樣的好處是功能範圍清楚,不會一口氣做出一個半成品任務系統。
目前完成內容包含:
CurrentObjectiveDisplay.cs
CurrentObjectiveDisplay 場景物件
NpcDialogueInteraction.cs 對話完成後設定目標
ChiefInteractionArea 設定完成後目標文字
村長第一次對話完成後顯示酒館目標
目標內容依劇本修正為「前往酒館,詢問受傷的年輕人」
下一步 Day 22 就可以開始建立酒館與受傷年輕人 NPC。
到時候玩家依照目前目標前往酒館,向年輕人詢問森林寶光、怪吼與洞穴門口的異常線索,主線就能繼續往森林與洞穴方向推進。